package br.com.manguesoft.mstore.util;

import br.com.manguesoft.mstore.negocio.cliente.api.Cliente;
import br.com.manguesoft.mstore.negocio.cliente.api.ControladorCliente;
import br.com.manguesoft.mstore.negocio.cliente.api.ControladorTipoCliente;
import br.com.manguesoft.mstore.negocio.cliente.api.TipoCliente;
import br.com.manguesoft.mstore.negocio.comum.api.Cidade;
import br.com.manguesoft.mstore.negocio.comum.api.ControladorCidade;
import br.com.manguesoft.mstore.negocio.comum.api.ControladorEndereco;
import br.com.manguesoft.mstore.negocio.comum.api.ControladorEstado;
import br.com.manguesoft.mstore.negocio.comum.api.Endereco;
import br.com.manguesoft.mstore.negocio.comum.api.Estado;
import br.com.manguesoft.mstore.negocio.comum.exception.MStoreException;

public final class Fachada {
	private static Fachada instancia = new Fachada();
	
	public static Fachada getInstancia(){
		return instancia;
	}

	public long inserirCliente(Cliente cliente)throws MStoreException{
		ControladorCliente controladorCliente = (ControladorCliente) ServiceLocator.getInstance().getApplicationContext().getBean("controladorCliente");
		return controladorCliente.inserir(cliente); 
	}
	
	public void atualizarCliente(Cliente cliente)throws MStoreException{
		ControladorCliente controladorCliente = (ControladorCliente) ServiceLocator.getInstance().getApplicationContext().getBean("controladorCliente");
		controladorCliente.atualizar(cliente);
	}

	public void removerCliente(Cliente cliente) throws MStoreException{
		ControladorCliente controladorCliente = (ControladorCliente) ServiceLocator.getInstance().getApplicationContext().getBean("controladorCliente");
		controladorCliente.remover(cliente, false);
	}
	
    public Cliente obterCliente ( long chavePrimaria) throws MStoreException{
		ControladorCliente controladorCliente = (ControladorCliente) ServiceLocator.getInstance().getApplicationContext().getBean("controladorCliente");
		return (Cliente) controladorCliente.obter(chavePrimaria);   	
    	
    }   
    
    public long inserir(TipoCliente tipoCliente) throws MStoreException{
    	ControladorTipoCliente controladorTipoCliente = (ControladorTipoCliente) ServiceLocator.getInstance().getApplicationContext().getBean("controladorTipoCliente");
		return controladorTipoCliente.inserir(tipoCliente); 
	}
    	
    
    public void atualizarTipoCliente(TipoCliente tipoCliente)throws MStoreException{
		ControladorTipoCliente controladorCliente = (ControladorTipoCliente) ServiceLocator.getInstance().getApplicationContext().getBean("controladortipoCliente");
		controladorCliente.atualizar(tipoCliente);
	}
    public void removerTipoCliente(TipoCliente tipoCliente) throws MStoreException{
		ControladorTipoCliente controladorCliente = (ControladorTipoCliente) ServiceLocator.getInstance().getApplicationContext().getBean("controladorTipoCliente");
		controladorCliente.remover(tipoCliente, false);
	}
    
    public TipoCliente obterTipoCliente (long chavePrimaria) throws MStoreException{
		ControladorTipoCliente controladorTipoCliente = (ControladorTipoCliente) ServiceLocator.getInstance().getApplicationContext().getBean("controladorTipoCliente");
		return (TipoCliente) controladorTipoCliente.obter(chavePrimaria);   	
    	
    }  
    
    public Cidade obterCidade (long chavePrimaria) throws MStoreException{
		ControladorCidade controladorCidade = (ControladorCidade) ServiceLocator.getInstance().getApplicationContext().getBean("controladorCidade");
		return (Cidade) controladorCidade.obter(chavePrimaria);  	
    	
    }
    
    public Estado obterEstado (long chavePrimaria) throws MStoreException{
		ControladorEstado controladorEstado = (ControladorEstado) ServiceLocator.getInstance().getApplicationContext().getBean("controladorEstado");
		return (Estado) controladorEstado.obter(chavePrimaria);  	
		    	
    }
    
    public long inserirEndereco(Endereco endereco)throws MStoreException{
		ControladorEndereco controladorEndereco = (ControladorEndereco) ServiceLocator.getInstance().getApplicationContext().getBean("controladorEndereco");
		return controladorEndereco.inserir(endereco); 
	}
    
    public Endereco obterEndereco ( long chavePrimaria) throws MStoreException{
		ControladorEndereco controladorEndereco = (ControladorEndereco) ServiceLocator.getInstance().getApplicationContext().getBean("controladorEndereco");
		return (Endereco)controladorEndereco.obter(chavePrimaria);   	
    	
    }
}


